/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.TipoOcorrenciaVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * Data Access Object da entidade TipoOcorrencia. Essa classe é responsável por todas as 
 * operações de banco de dados relacionadas à entidade.
 * 
 * @author Bruno Schifer Bernardi 2026545/5
 */
public class TipoOcorrenciaDAO extends BaseDAO<TipoOcorrenciaVO> {

    @Override
    public void inserir(TipoOcorrenciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TT_TIPOOCORRENCIA(NO_OCORRENCIA, DS_OCORRENCIA)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(entidade.getNoOcorrencia(),entidade.getDsOcorrencia());

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();
        
        entidade.setIdTipoOcorrencia(idGerado);
    }

    @Override
    public void alterar(TipoOcorrenciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TT_TIPOOCORRENCIA SET NO_OCORRENCIA = ?, DS_OCORRENCIA = ?");
        query.append("WHERE ID_TIPOOCORRENCIA = ?");

        List<?> parametros = criarParametros(entidade.getNoOcorrencia(), entidade.getDsOcorrencia(), entidade.getIdTipoOcorrencia());

        executarAlteracao(query.toString(), parametros);
    }

    @Override
    public void excluir(TipoOcorrenciaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TT_TIPOOCORRENCIA");
        query.append("WHERE ID_TIPOOCORRENCIA = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdTipoOcorrencia()));
    }

    @Override
    public TipoOcorrenciaVO consultarPorId(Serializable id) {

        TipoOcorrenciaVO tipoOcorrencia = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TT_TIPOOCORRENCIA T WHERE T.ID_TIPOOCORRENCIA = ?");

        tipoOcorrencia = consultarUm(query.toString(), criarParametros(id));

        return tipoOcorrencia;
    }

    @Override
    public List<TipoOcorrenciaVO> consultarPorExemplo(TipoOcorrenciaVO exemplo) {

        List<TipoOcorrenciaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TT_TIPOOCORRENCIA T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }

    @Override
    protected TipoOcorrenciaVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        TipoOcorrenciaVO tipoOcorrencia = new TipoOcorrenciaVO();
        
        tipoOcorrencia.setIdTipoOcorrencia(rs.getInt("ID_TIPOOCORRENCIA"));
        tipoOcorrencia.setNoOcorrencia(rs.getString("NO_OCORRENCIA"));
        tipoOcorrencia.setDsOcorrencia(rs.getString("DS_OCORRENCIA"));

        return tipoOcorrencia;
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, TipoOcorrenciaVO exemplo) {

        if (exemplo.getNoOcorrencia() != null && exemplo.getNoOcorrencia().trim().length() > 0) {
            query.append("AND T.NO_OCORRENCIA LIKE ?");
            adicionarParametro("%" + exemplo.getNoOcorrencia() + "%");
        }
        if (exemplo.getDsOcorrencia() != null && exemplo.getDsOcorrencia().trim().length() > 0) {
            query.append("AND T.DS_OCORRENCIA LIKE ?");
            adicionarParametro("%" + exemplo.getDsOcorrencia() + "%");
        }
    }
}